#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
class segtree{
  private:
    int n;
    vector<pii> B;
    vector<int> M,T;
  public:
    inline void pushup(int u){
      M[u]=min(M[u<<1],M[u<<1|1]);
    }
    inline void pushdown(int u){
      if(T[u]){
        M[u<<1]+=T[u],M[u<<1|1]+=T[u];
        T[u<<1]+=T[u],T[u<<1|1]+=T[u],T[u]=0;
      }
    }
    inline void resz(int N){
      n=N,B.resize(n<<2),M.resize(n<<2),T.resize(n<<2);
    }
    inline void reset(vector<int> &a){
      function<void(int,int,int)> build=[&](int u,int l,int r){
        B[u]=make_pair(l,r),T[u]=0;
        if(l==r){M[u]=a[l]; return;}
        int m=l+r>>1;
        build(u<<1,l,m),build(u<<1|1,m+1,r);
        pushup(u);
      };
      build(1,0,n-1);
    }
    void update(int u,int l,int r,int d){
      if(B[u].first>r||B[u].second<l)return;
      if(l<=B[u].first&&B[u].second<=r){
        T[u]+=d,M[u]+=d; return;
      }
      pushdown(u);
      update(u<<1,l,r,d),update(u<<1|1,l,r,d);
      pushup(u);
    }
    inline bool pd(){return M[1]>=0;}
}t;
inline bool pd(int n,string &s){
  vector<int> a(n),p(n);
  for(int i=0;i<n;i++)
    a[i]=(s[i]=='('?1:-1);
  partial_sum(a.begin(),a.end(),p.begin());
  int c=p[n-1]; t.reset(p);
  if(!c&&t.pd())return true;
  vector<int> perm(n);
  iota(perm.begin(),perm.end(),0);
  shuffle(perm.begin(),perm.end(),mt19937(random_device()()));
  for(int i:perm){
    if(abs(p[n-1])>>1&1){
      int L1=min(i,n-i-1);
      for(int j=0;j<=L1;j++){
        t.update(1,i-j,n-1,-2*a[i-j]),c-=2*a[i-j];
        if(j)t.update(1,i+j,n-1,-2*a[i+j]),c-=2*a[i+j];
        if(!c&&t.pd())return true;
      }
      for(int j=L1;~j;j--){
        t.update(1,i-j,n-1,2*a[i-j]),c+=2*a[i-j];
        if(j)t.update(1,i+j,n-1,2*a[i+j]),c+=2*a[i+j];
      }
    }
    else if(i){
      int L2=min(i,n-i);
      for(int j=1;j<=L2;j++){
        t.update(1,i-j,n-1,-2*a[i-j]),c-=2*a[i-j];
        t.update(1,i+j-1,n-1,-2*a[i+j-1]),c-=2*a[i+j-1];
        if(!c&&t.pd())return true;
      }
      for(int j=L2;j;j--){
        t.update(1,i-j,n-1,2*a[i-j]),c+=2*a[i-j];
        t.update(1,i+j-1,n-1,2*a[i+j-1]),c+=2*a[i+j-1];
      }
    }
  }
  return false;
}
int main(){
  freopen("bracket.in","r",stdin);
  freopen("bracket.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  int st=clock(),n; string s; cin>>n>>s,t.resz(n);
  if(n&1)cout<<"0\n",exit(0);
  vector<int> p;
  for(int i=0;i<n;i++)
    if(s[i]=='x')p.emplace_back(i);
  shuffle(p.begin(),p.end(),mt19937(random_device()()));
  int m=p.size(),x=0,c=0;
  for(int S=0;S<1<<m;S++){
    string t=s;
    for(int i=0;i<m;i++)
      t[p[i]]=(S>>i&1?'(':')');
    pd(n,t)?c++:x--;
    if(1.0*(clock()-st)/CLOCKS_PER_SEC>=1.9){
      cout<<(1<<m)+x<<endl; return 0;
    }
  }
  cout<<c<<endl;
  return 0;
}